
package Indexador;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * Clase utilizada para comparar si un link es válido o no.
 *
 * @author Mikel&Igor
 */
public class ComparadorLinks
{
    private String links[];
    private final int numLinks=6;

    /**
     * Crea un nuevo comparador de links para las URL configuradas
     */
    public ComparadorLinks()
    {
        leerLinks();
    }

    /**
     * Lee los links configurados y los almacena en un array para hacer
     * las posteriores comparaciones.
     */
    private void leerLinks()
    {
        int i;

        links = new String[numLinks];

        links[0]="megaupload";
        links[1]="rapidshare";
        links[2]="fileserve";
        links[3]="linkto";
        links[4]="hotfile";
        links[5]="freakshare";
    }

    /**
     * Desde una línea de texto, devuelve el URL completo, eliminando todo lo
     * que no sea parte de dicha dirección.
     *
     * @param text La línea de texto a comprobar.
     * @return El URL o null si no hay URL o no es válido.
     */
    public String getURLFromText(String text)
    {
        Pattern pat=Pattern.compile("(http://[^<>\"\n' ]*)([<>\"\n' ])*");
        Matcher mat=pat.matcher(text);
        String URL;

        while(mat.find()) //Cuando lo encontramos lo devolvemos si es correcto
        {
            URL=mat.group(1);
            if(esURLVerdadero(URL))
                return URL;
        }

        return null;
    }

    /**
     * Comprueba si el URL tiene un formato correcto.
     * @return True si tiene un formato correcto y false en otro caso.
     */
    public boolean esURLVerdadero(String URL)
    {
        if(URL.contains(".."))//No tiene que tener más de dos puntos seguidos
            return false;

        return true;
    }

    /**
     *
     * Compara si una URL es válida o no, es decir, si es de uno de los servidores
     * configurados y si tiene un formato válido.
     *
     * @param URL La URL a comparar.
     * @return True si está dentro de los servidores configurados y false en
     * otro caso.
     */
    public boolean comparaLinks(String URL)
    {
        int i;

        for(i=0;i<numLinks;i++)
            if(URL.contains(links[i]))
                return true;

        return false;
    }
}
